package com.example.myapplication01.chapter09.adapter;   // 定义包路径，表示当前类所在位置

import android.content.Context;  // 上下文相关类，用于访问应用资源
import android.view.View;        // 基础视图类
import android.view.ViewGroup;   // 视图容器类
import android.widget.ImageView;//  图片显示控件
import androidx.annotation.NonNull;  // 非空注解
import androidx.annotation.Nullable;//  可空注解
import androidx.viewpager.widget.PagerAdapter;  // ViewPager的适配器基类
import com.example.myapplication01.chapter06.enity.GoodsInfo;  // 自定义商品信息实体类
import java.util.ArrayList;     // 动态数组
import java.util.List;          // 列表接口

// 自定义ViewPager适配器，用于展示商品图片轮播
public class ImagePagerAdapater extends PagerAdapter {
    private final Context mContext;        // 上下文对象（用于创建视图）
    private final ArrayList<GoodsInfo> mGoodsList; // 商品数据集合
    private List<ImageView> mViewList = new ArrayList<>(); // 图像视图缓存列表

    // 构造方法：初始化数据并预创建ImageView
    public ImagePagerAdapater(Context mContext, ArrayList<GoodsInfo> mGoodsList) {
        this.mContext = mContext;
        this.mGoodsList = mGoodsList;
        // 遍历商品数据，为每个商品创建对应的ImageView
        for (GoodsInfo info : mGoodsList) {
            ImageView view = new ImageView(mContext);
            // 设置图片布局参数（宽度撑满父容器，高度自适应）
            view.setLayoutParams(new  ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT
            ));
            view.setImageResource(info.pic);  // 设置商品图片资源
            mViewList.add(view);  // 将ImageView加入缓存列表
        }
    }

    // 获取总页数（返回缓存视图数量）
    @Override
    public int getCount() {
        return mViewList.size();
    }

    // 判断视图是否来自指定对象（此处直接比较对象引用）
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    // 创建指定位置的页面（核心方法）
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        ImageView item = mViewList.get(position);  // 从缓存获取ImageView
        container.addView(item);  // 将视图添加到ViewPager容器
        return item; // 返回关联对象（用于isViewFromObject判断）
    }

    // 销毁指定位置的页面（防止内存泄漏）
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView(mViewList.get(position));  // 从容器移除视图
    }

    // 获取页面标题（通常用于关联TabLayout）
    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return mGoodsList.get(position).name;  // 返回商品名称作为标题
    }
}